import request from '@/utils/request'
import store from '@/store'
import storage from '@/utils/storage'
import constant from '@/utils/constant'

// 统一前缀，若网关路由不一致，只需改这里
const prefix = '/symptom/yzk'

// 获取当前登录用户ID（优先 Vuex，兜底本地存储），返回 number 或 undefined
function getUserId() {
  try {
    const raw = (store && store.getters && store.getters.id) || storage.get(constant.id)
    if (raw === null || raw === undefined) return undefined
    const val = String(raw).trim()
    return val === '' ? undefined : raw
  } catch (_) {
    return undefined
  }
}

/**
 * AI智能客服对话
 * 后端：GET {gateway}{prefix}/chat
 * @param {string} message - 用户消息内容
 */
export function chatWithAI(message) {
  const params = { message }
  const userId = getUserId()
  if (userId !== undefined) params.userId = userId
  
  return request({
    url: `${prefix}/chat`,
    method: 'post',
    params: params,
    // 设置响应类型为文本，支持流式响应
    responseType: 'text',
    // AI对话可能较慢，延长超时时间到120秒，避免客户端提前断开导致服务端写入异常
    timeout: 120000
  })
}

/**
 * 症状检查（AI问诊）
 * 后端：POST {gateway}/ai/yzk/chat
 * Body: { memoryId: number|null, userMessage: string }
 * 说明：服务端返回的是 text/stream；前端按文本整体处理并做打字机效果
 * 注意：memoryId 实际上就是用户ID，后端通过 memoryId 识别用户
 */
export function chatSymptom(userMessage, memoryId = null) {
  const url = `/symptom/yzk/chat`
  // 如果没有传入 memoryId，则使用当前用户ID作为 memoryId
  const finalMemoryId = memoryId || getUserId()
  const data = { memoryId: finalMemoryId, userMessage }

  return request({
    url,
    method: 'post',
    data,
    responseType: 'text',
    timeout: 120000
  })
}